
import argparse
import json
from datetime import datetime
from pathlib import Path

import pandas as pd

def load_json(file_path):
    """加载 JSON 文件并返回其内容作为字典"""
    with open(file_path, 'r', encoding='utf-8') as file:
        return json.load(file)

def json_to_dataframe(json_data):
    """将 JSON 数据转换为 Pandas DataFrame"""
    # 假设 JSON 数据是一个列表或字典
    if isinstance(json_data, list):
        df = pd.DataFrame(json_data)
    elif isinstance(json_data, dict):
        df = pd.json_normalize(json_data)
    else:
        raise ValueError("JSON 数据格式不支持")
    return df

def save_to_excel(df, json_path):
    """将 DataFrame 保存为 Excel 文件，并在文件名中添加当前时间"""
    # 获取当前时间并格式化为字符串
    current_time = datetime.now().strftime('%Y%m%d_%H%M%S')
    base_name = json_path.with_suffix('')

    # 构建完整的文件名
    excel_name = f"{base_name}_{current_time}.xlsx"
    
    df.to_excel(excel_name, index=False)
    print(f"数据已成功保存到 {excel_name}")

def main():
    # 创建 ArgumentParser 对象
    parser = argparse.ArgumentParser(description="将 JSON 文件转换为 Excel 文件")

    # 添加位置参数
    parser.add_argument('json_path', help='JSON 文件的路径')

    # 解析参数
    args = parser.parse_args()

    try:
        # 获取文件绝对路径
        absolute_path = Path(args.json_path).resolve()

        # 加载 JSON 文件
        json_data = load_json(absolute_path)
        
        # 将 JSON 数据转换为 DataFrame
        df = json_to_dataframe(json_data)
        
        # 保存为 Excel 文件
        save_to_excel(df, absolute_path)
    except FileNotFoundError:
        print(f"错误: 无法找到文件 {args.json_path}")
    except json.JSONDecodeError:
        print(f"错误: {args.json_path} 不是有效的 JSON 文件")
    except Exception as e:
        print(f"发生了一个错误: {e}")

if __name__ == "__main__":
    main()